﻿using System;
using Foundation;
using ObjCRuntime;
using UIKit;
using CoreLocation;

namespace UMessageTouch
{
    //    [Verify(ConstantsInterfaceAssociation)]
    partial interface Constants
    {
        // extern NSString *const kUMessageAliasTypeSina;
        [Field("kUMessageAliasTypeSina")]
        NSString kUMessageAliasTypeSina { get; }

        // extern NSString *const kUMessageAliasTypeTencent;
        [Field("kUMessageAliasTypeTencent")]
        NSString kUMessageAliasTypeTencent { get; }

        // extern NSString *const kUMessageAliasTypeQQ;
        [Field("kUMessageAliasTypeQQ")]
        NSString kUMessageAliasTypeQQ { get; }

        // extern NSString *const kUMessageAliasTypeWeiXin;
        [Field("kUMessageAliasTypeWeiXin")]
        NSString kUMessageAliasTypeWeiXin { get; }

        // extern NSString *const kUMessageAliasTypeBaidu;
        [Field("kUMessageAliasTypeBaidu")]
        NSString kUMessageAliasTypeBaidu { get; }

        // extern NSString *const kUMessageAliasTypeRenRen;
        [Field("kUMessageAliasTypeRenRen")]
        NSString kUMessageAliasTypeRenRen { get; }

        // extern NSString *const kUMessageAliasTypeKaixin;
        [Field("kUMessageAliasTypeKaixin")]
        NSString kUMessageAliasTypeKaixin { get; }

        // extern NSString *const kUMessageAliasTypeDouban;
        [Field("kUMessageAliasTypeDouban")]
        NSString kUMessageAliasTypeDouban { get; }

        // extern NSString *const kUMessageAliasTypeFacebook;
        [Field("kUMessageAliasTypeFacebook")]
        NSString kUMessageAliasTypeFacebook { get; }

        // extern NSString *const kUMessageAliasTypeTwitter;
        [Field("kUMessageAliasTypeTwitter")]
        NSString kUMessageAliasTypeTwitter { get; }

        // extern NSString *const kUMessageErrorDomain;
        [Field("kUMessageErrorDomain")]
        NSString kUMessageErrorDomain { get; }
    }

    // @interface UMessage : NSObject
    [BaseType(typeof(NSObject))]
    interface UMessage
    {
        // +(void)startWithAppkey:(NSString *)appKey launchOptions:(NSDictionary *)launchOptions;
        [Static]
        [Export("startWithAppkey:launchOptions:")]
        void StartWithAppkey(string appKey, [NullAllowed] NSDictionary launchOptions);

        // +(void)registerForRemoteNotificationTypes:(UIRemoteNotificationType)types __attribute__((availability(ios, introduced=3.0, deprecated=8.0)));
        [Availability(Introduced = Platform.iOS_3_0, Deprecated = Platform.iOS_8_0, Message = "[Sharpie.Clang.Ast.IdentifierInfo: Please use registerRemoteNotificationAndUserNotificationSettings instead]")]
        [Static]
        [Export("registerForRemoteNotificationTypes:")]
        void RegisterForRemoteNotificationTypes(UIRemoteNotificationType types);

        // +(void)registerRemoteNotificationAndUserNotificationSettings:(UIUserNotificationSettings *)notificationSettings __attribute__((availability(ios, introduced=8.0)));
        [iOS(8, 0)]
        [Static]
        [Export("registerRemoteNotificationAndUserNotificationSettings:")]
        void RegisterRemoteNotificationAndUserNotificationSettings(UIUserNotificationSettings notificationSettings);

        // +(void)unregisterForRemoteNotifications;
        [Static]
        [Export("unregisterForRemoteNotifications")]
        void UnregisterForRemoteNotifications();

        // +(void)registerDeviceToken:(NSData *)deviceToken;
        [Static]
        [Export("registerDeviceToken:")]
        void RegisterDeviceToken(NSData deviceToken);

        // +(void)didReceiveRemoteNotification:(NSDictionary *)userInfo;
        [Static]
        [Export("didReceiveRemoteNotification:")]
        void DidReceiveRemoteNotification(NSDictionary userInfo);

        // +(void)setLocation:(CLLocation *)location;
        [Static]
        [Export("setLocation:")]
        void SetLocation(CLLocation location);

        // +(void)setLogEnabled:(BOOL)value;
        [Static]
        [Export("setLogEnabled:")]
        void SetLogEnabled(bool value);

        // +(void)setBadgeClear:(BOOL)value;
        [Static]
        [Export("setBadgeClear:")]
        void SetBadgeClear(bool value);

        // +(void)setAutoAlert:(BOOL)value;
        [Static]
        [Export("setAutoAlert:")]
        void SetAutoAlert(bool value);

        // +(void)setChannel:(NSString *)channel;
        [Static]
        [Export("setChannel:")]
        void SetChannel(string channel);

        // +(void)sendClickReportForRemoteNotification:(NSDictionary *)userInfo;
        [Static]
        [Export("sendClickReportForRemoteNotification:")]
        void SendClickReportForRemoteNotification(NSDictionary userInfo);

        // +(void)getTags:(void (^)(NSSet *, NSInteger, NSError *))handle;
        [Static]
        [Export("getTags:")]
        void GetTags(Action<NSSet, nint, NSError> handle);

        // +(void)addTag:(id)tag response:(void (^)(id, NSInteger, NSError *))handle;
        [Static]
        [Export("addTag:response:")]
        void AddTag(NSObject tag, Action<NSObject, nint, NSError> handle);

        // +(void)removeTag:(id)tag response:(void (^)(id, NSInteger, NSError *))handle;
        [Static]
        [Export("removeTag:response:")]
        void RemoveTag(NSObject tag, Action<NSObject, nint, NSError> handle);

        // +(void)removeAllTags:(void (^)(id, NSInteger, NSError *))handle;
        [Static]
        [Export("removeAllTags:")]
        void RemoveAllTags(Action<NSObject, nint, NSError> handle);

        // +(void)addAlias:(NSString *)name type:(NSString *)type response:(void (^)(id, NSError *))handle;
        [Static]
        [Export("addAlias:type:response:")]
        void AddAlias(string name, string type, Action<NSObject, NSError> handle);

        // +(void)removeAlias:(NSString *)name type:(NSString *)type response:(void (^)(id, NSError *))handle;
        [Static]
        [Export("removeAlias:type:response:")]
        void RemoveAlias(string name, string type, Action<NSObject, NSError> handle);
    }
}
